package org.nudt.system.controller

import cn.dev33.satoken.annotation.SaCheckLogin
import cn.dev33.satoken.stp.StpUtil
import org.nudt.common.model.Admin
import org.nudt.common.model.ResponseData
import org.nudt.common.model.dto.AdminDto
import org.nudt.system.service.SysAdminService
import org.springframework.web.bind.annotation.*

@RestController
@RequestMapping("/v1/admin")
class SysAdminController(private val sysAdminService: SysAdminService) {
    
    /**
     * 处理管理员登录请求
     * @param admin 管理员登录信息
     * @return 登录成功后的响应数据，包含token和管理员信息
     */
    @PostMapping("/login")
    fun login(@RequestBody admin: AdminDto): ResponseData<HashMap<String, Any>> {
        // 调用sysAdminService的login方法进行登录验证，返回管理员信息
        val admin = sysAdminService.login(admin)
        // 使用StpUtil进行登录操作，传入管理员的id
        StpUtil.login(admin.id)
        // 创建一个HashMap用于存储返回的数据
        val resultMap = HashMap<String, Any>()
        // 将token值放入resultMap中
        resultMap.put("token", StpUtil.getTokenValue())
        // 将管理员信息放入resultMap中
        resultMap.put("admin", admin)
        // 返回成功的响应数据，包含resultMap
        return ResponseData.success(resultMap)
    }
    
    /**
     * 处理管理员注册请求
     * @param username 管理员用户名
     * @param password 管理员密码
     * @return 注册成功后的响应数据，包含管理员信息
     */
    @PostMapping("/register")
    fun register(@RequestParam username: String, @RequestParam password: String): ResponseData<Admin> {
        // 调用sysAdminService的register方法进行注册，返回管理员信息
        val admin = sysAdminService.register(username, password)
        // 返回成功的响应数据，包含管理员信息
        return ResponseData.success(admin)
    }
    
    /**
     * 获取管理员信息
     * @return 管理员信息的响应数据
     */
    @SaCheckLogin
    @GetMapping("/info")
    fun info(): ResponseData<Admin?> {
        // 使用StpUtil获取当前登录的管理员id
        val admin = sysAdminService.getAdminById(StpUtil.getLoginIdAsInt())
        // 返回成功的响应数据，包含管理员信息
        return ResponseData.success(admin)
    }
}